#include<vector>

using namespace std;

class Solution {
public:

    // 移动长板时容器宽度必然减小而容器高度由短板决定 移动长板后高度要么保持原短板不变 新长板仍高于短板 要么变得更小 
    // 新长板比原短板更矮 宽度减小叠加高度不变 变小 面积一定变小或不变完全没有增大的可能因此没必要移动长板移动短板时虽然容器宽度会减小但高度有机会变大 
    // 新短板比原短板更高 此时 高度增加的收益 可能超过 宽度减小的损失 最终让面积增大 即便高度没变大 新短板更矮或不变 
    // 导致面积变小也无需担心因为我们已经保存了之前计算过的最大面积不会影响最终结果
    // 整个过程只需依次移动短板指针持续计算当前面积并更新最大面积直到两个指针重合遍历结束就能高效找到最大容器面积
    int min(int x , int y)
    {
        return x < y ? x : y ;
    }

    int Calculate_capacity(vector<int>& height,int start ,int end)
    {
        return min(height[start],height[end]) * (end - start);
    }

    int maxArea(vector<int>& height) {
        int start = 0;
        int end = height.size()-1;

        int _maxArea = 0;
        
        while(start<end)
        {
            int tmp = Calculate_capacity(height,start,end);
            if(tmp>_maxArea)
                _maxArea = tmp;
            
            if (height[start] < height[end]) { 
                start++; // 左板是短板右移左指针
            } else {
                end--; // 右板是短板（或相等）左移右指针
            }
        }
        return _maxArea;
    }
};